12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using UnityEngine;
- public class BillboardLineRendererCircle : MonoBehaviour {
- public Color color = Color.black;
- public float width = 1f;
- public int numSegments = 50;
- public float radius = 0.5f;
- private LineRenderer _lineRenderer;
- void Start() {
- _lineRenderer = gameObject.GetComponent<LineRenderer>();
- if (_lineRenderer != null) return;
- // Initialize line renderer.
- _lineRenderer = gameObject.AddComponent<LineRenderer>();
- _lineRenderer.materials = new[] {
- new Material(Shader.Find("Universal Render Pipeline/Unlit")) { color = color }
- };
- _lineRenderer.startWidth = width * 0.01f;
- _lineRenderer.endWidth = width * 0.01f;
- _lineRenderer.positionCount = numSegments + 1;
- _lineRenderer.useWorldSpace = false;
- // Create points.
- float deltaTheta = (float)(2.0 * Mathf.PI) / numSegments;
- float theta = 0f;
- for (int i = 0; i < numSegments + 1; i++) {
- float x = Mathf.Cos(theta);
- float y = Mathf.Sin(theta);
- Vector3 pos = new Vector3(x, y, 0);
- _lineRenderer.SetPosition(i, pos * radius);
- theta += deltaTheta;
- }
- }
- [ContextMenu("Reinitialize")]
- private void Reinitialize() {
- if (_lineRenderer != null) {
- DestroyImmediate(_lineRenderer);
- }
- Start();
- Update();
- }
- private void Update() {
- transform.LookAt(Camera.main.transform);
- transform.Rotate(0, 180, 0);
- }
- }
|